﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using BEGDC.CC.BL.Common;
using BEGDC.CC.BL.Common.Query;
using BEGDC.CC.BL.UserManagement;
using BEGDC.CC.BL.Workflow;
using BEGDC.CC.Entity;
using BEGDC.CC.Web.UserControls;
using BEGDC.Utility.Castle;
using BEGDC.Utility.ExceptionManagement;
using NetBpm.Util.Client;
using NetBpm.Workflow.Execution;
using NetBpm.Workflow.Execution.EComp;

namespace BEGDC.CC.Web
{
    /// <summary>
    /// Summary description for main.
    /// </summary>
    public class MyParticipation : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button btnExport;
        protected System.Web.UI.WebControls.DropDownList ddlDepartment;
        protected System.Web.UI.WebControls.Button btnSearch;
        protected System.Web.UI.WebControls.TextBox txtApplication;
        protected System.Web.UI.WebControls.ImageButton btnPageFirst;
        protected System.Web.UI.WebControls.ImageButton btnPagePrev;
        protected System.Web.UI.WebControls.ImageButton btnPageNext;
        protected System.Web.UI.WebControls.ImageButton btnPageLast;
        protected System.Web.UI.WebControls.Label lblRecordCount;
        protected System.Web.UI.WebControls.Label lblPageCount;
        protected System.Web.UI.WebControls.Label lblCurrentPageIndex;
        protected System.Web.UI.WebControls.DataGrid dgTaskList;
        protected System.Web.UI.WebControls.TextBox txtPage;
        protected System.Web.UI.WebControls.ImageButton btnGotoPage;
        protected System.Web.UI.WebControls.DropDownList ddlFlowType;
        protected System.Web.UI.WebControls.DropDownList ddlStatus;
        protected System.Web.UI.WebControls.DropDownList ddlYear;
        protected System.Web.UI.HtmlControls.HtmlGenericControl tbTypeSpan;
        protected System.Web.UI.HtmlControls.HtmlGenericControl tbDdlFlowTypeSpan;

        #region AppType

        private const string SEARCH_CR = "CR";
        private const string SEARCH_EV = "EV";
        // All OCR
        private const string SEARCH_OCR = "OCR";
        // All OCV
        private const string SEARCH_OCV = "OCV";
        //the original OCR process
        private const string SEARCH_ORIGINAL_OCR = "ORIGINAL_OCR";
        //the original OCV process
        private const string SEARCH_ORIGINAL_OCV = "ORIGINAL_OCV";
        private const string SEARCH_EBDCR = "EBD";
        private const string SEARCH_ESCCR = "ESC";
        private const string SEARCH_EBDCV = "EBDCV";
        private const string SEARCH_ESCCV = "ESCCV";

        protected string flowtype
        {
            get
            {
                return this.Request.QueryString["flow"];
            }
        }

        #endregion

        private string _Sorting
        {
            get
            {
                if (ViewState["Sorting"] == null) return string.Empty;

                return ViewState["Sorting"].ToString();
            }
            set { ViewState["Sorting"] = value; }
        }

        protected bool IsEZVRequest
        {
            get
            {
                return this.Request.QueryString["topid"] == "10002";
            }
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
            try
            {
                // Put user code to initialize the page here
                if (!Page.IsPostBack)
                {
                    InitializeDropDownList();

                    this.BindData(1);
                }
            }
            catch (GDCException gdcEx)
            {
                //WebUtility.Go2ErrorPage(this.Page, gdcEx.ErrorNumber);
            }
            catch (Exception ex)
            {
                //string s = ex.Message;
                //WebUtility.Go2ErrorPage(this.Page, BEGDC.CC.BL.Common.ErrorCode.Other_Exception);
            }
        }

        private void BindOVFlowTypeDropDown()
        {
            //DropdownList ddlFlowType
            if (this.flowtype == null) return;

            if (this.flowtype.Equals(SEARCH_OCR) || this.flowtype.Equals(SEARCH_OCV))
            {
                this.tbTypeSpan.Visible = true;
                this.tbDdlFlowTypeSpan.Visible = true;

                if (this.flowtype.Contains(SEARCH_OCR))
                {
                    System.Web.UI.WebControls.ListItem itemOCR = new System.Web.UI.WebControls.ListItem("Overseas Customer Reception(海外客户来访接待)", SEARCH_ORIGINAL_OCR);
                    System.Web.UI.WebControls.ListItem itemEBD = new System.Web.UI.WebControls.ListItem("EBD Customer Reception(EBD海外客户来访接待)", SEARCH_EBDCR);
                    System.Web.UI.WebControls.ListItem itemESC = new System.Web.UI.WebControls.ListItem("ESC Customer Reception(ESC海外客户来访接待)", SEARCH_ESCCR);

                    this.ddlFlowType.Items.Add(itemOCR);
                    this.ddlFlowType.Items.Add(itemEBD);
                    this.ddlFlowType.Items.Add(itemESC);
                }
                else
                {
                    System.Web.UI.WebControls.ListItem itemOCV = new System.Web.UI.WebControls.ListItem("Overseas Customer Visiting(海外客户陪同出访)", SEARCH_ORIGINAL_OCV);
                    System.Web.UI.WebControls.ListItem itemEBDCV = new System.Web.UI.WebControls.ListItem("EBD Customer Visiting(EBD海外客户陪同出访)", SEARCH_EBDCV);
                    System.Web.UI.WebControls.ListItem itemESCCV = new System.Web.UI.WebControls.ListItem("ESC Customer Visiting(ESC海外客户陪同出访)", SEARCH_ESCCV);

                    this.ddlFlowType.Items.Add(itemOCV);
                    this.ddlFlowType.Items.Add(itemEBDCV);
                    this.ddlFlowType.Items.Add(itemESCCV);
                }
            }
        }


        private void InitializeDropDownList()
        {
            this.BindOVFlowTypeDropDown();

            //System.Web.UI.WebControls.ListItem itemEV = new System.Web.UI.WebControls.ListItem("Executive Visiting(高层拜访)", "EV");
            ////System.Web.UI.WebControls.ListItem itemCV = new System.Web.UI.WebControls.ListItem("Customer Domestic & Overseas Visiting(客户考察)", "CV");
            //System.Web.UI.WebControls.ListItem itemCR = new System.Web.UI.WebControls.ListItem("Customer Reception In Shanghai(客户接待)", "CR");
            ////System.Web.UI.WebControls.ListItem itemCO = new System.Web.UI.WebControls.ListItem("Customer Reception Out Of Shanghai(上海以外客户接待)", "CO");
            //System.Web.UI.WebControls.ListItem itemOCR = new System.Web.UI.WebControls.ListItem("Overseas Customer Reception(海外客户来访接待)", "OCR");
            //System.Web.UI.WebControls.ListItem itemOCV = new System.Web.UI.WebControls.ListItem("Overseas Customer Visiting(海外客户陪同出访)", "OCV");
            //System.Web.UI.WebControls.ListItem itemEBD = new System.Web.UI.WebControls.ListItem("EBD Customer Reception(EBD海外客户来访接待)", "EBD");
            //System.Web.UI.WebControls.ListItem itemEBDCV = new System.Web.UI.WebControls.ListItem("EBD Customer Visiting(EBD海外客户陪同出访)", "EBDCV");
            //System.Web.UI.WebControls.ListItem itemESC = new System.Web.UI.WebControls.ListItem("ESC Customer Reception(ESC海外客户来访接待)", "ESC");
            //System.Web.UI.WebControls.ListItem itemESCCV = new System.Web.UI.WebControls.ListItem("ESC Customer Visiting(ESC海外客户陪同出访)", "ESCCV");

            //this.ddlFlowType.Items.Add(itemEV);
            ////this.ddlFlowType.Items.Add(itemCV);
            //this.ddlFlowType.Items.Add(itemCR);
            ////this.ddlFlowType.Items.Add(itemCO);
            //this.ddlFlowType.Items.Add(itemOCR);
            //this.ddlFlowType.Items.Add(itemOCV);
            //this.ddlFlowType.Items.Add(itemEBD);
            //this.ddlFlowType.Items.Add(itemEBDCV);
            //this.ddlFlowType.Items.Add(itemESC);
            //this.ddlFlowType.Items.Add(itemESCCV);

            //Comment out By Wicresoft
            //if (string.IsNullOrEmpty(this.Request.QueryString["topid"]))
            //{
            //    this.ddlFlowType.Items.Add(new ListItem("EZVisit", "EZV"));
            //}
            //else
            //{
            //    this.ddlFlowType.Items.Clear();
            //    this.ddlFlowType.Items.Add(new ListItem("EZVisit", "EZV"));
            //}

            IUser userService = AppContainer.Instance[ServiceConst.UserService] as IUser;
            this.ddlDepartment.DataSource = userService.GetBusinessGroupList();
            this.ddlDepartment.DataValueField = "ID";
            this.ddlDepartment.DataTextField = "DepartmentCode";
            this.ddlDepartment.DataBind();
            this.ddlDepartment.Items.Insert(0, new System.Web.UI.WebControls.ListItem("All", "-1"));
            this.ddlDepartment.SelectedIndex = 0;

            this.ddlYear.SelectedValue = System.DateTime.Now.Year.ToString();
        }


        private void BindData(int pageIndex)
        {
            //string flowtype = this.ddlFlowType.SelectedValue.ToString();
            //flowtype仅能区分EV、CR、OCV、OCR,
            //不能区分OCR下的Original OCR\EBDCR\ESCCR及OCV下的Original OCV\EBDCV\ESCCV
            //使用overSeasFlowType区分Original OCR\EBDCR\ESCCR、Original OCV\EBDCV\ESCCV
            string overSeasFlowType = this.flowtype;
            if (this.ddlFlowType.Visible)
            {
                if (!string.IsNullOrEmpty(this.ddlFlowType.SelectedValue.ToString()))
                {
                    overSeasFlowType = this.ddlFlowType.SelectedValue.ToString();
                }
            }

            //if (flowtype == string.Empty)	flowtype = BEGDC.CC.BL.Workflow.WorkflowTypes.EV;
            IQuery iquery = AppContainer.Instance[ServiceConst.QueryService] as IQuery;

            System.Data.DataTable dtTasks = iquery.QueryMyParticipationTaskList(((BEGDC.CC.BL.Workflow.CCPrincipal)Page.User).Roles, ((CCIdentity)HttpContext.Current.User.Identity).UserInfo.NameEN, overSeasFlowType,
                this.ddlDepartment.SelectedValue, this.txtApplication.Text.Trim(), this.ddlStatus.SelectedValue, this.ddlYear.SelectedValue);
            if (this._Sorting != string.Empty)
            {
                dtTasks.DefaultView.Sort = this._Sorting;
            }
            int count = dtTasks.Rows.Count;

            this.dgTaskList.DataSource = dtTasks;
            this.dgTaskList.DataBind();

            SetPageCount(count, pageIndex);
        }

        #region Web Form Designer generated code

        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.ddlFlowType.SelectedIndexChanged += new System.EventHandler(this.ddlFlowType_SelectedIndexChanged);
            this.btnExport.Click += new EventHandler(btnExport_Click);
            this.btnPageFirst.Click += new System.Web.UI.ImageClickEventHandler(this.btnPageFirst_Click);
            this.btnPagePrev.Click += new System.Web.UI.ImageClickEventHandler(this.btnPagePrev_Click);
            this.btnPageNext.Click += new System.Web.UI.ImageClickEventHandler(this.btnPageNext_Click);
            this.btnPageLast.Click += new System.Web.UI.ImageClickEventHandler(this.btnPageLast_Click);
            this.btnGotoPage.Click += new System.Web.UI.ImageClickEventHandler(this.btnGotoPage_Click);
            this.btnSearch.Click += new EventHandler(btnSearch_Click);
            this.dgTaskList.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dgTaskList_SortCommand);
            this.Load += new System.EventHandler(this.Page_Load);
        }

        #endregion

        #region ---------- paging events ----------------

        private void btnPageFirst_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = 0;
            this.BindData(1);
        }

        private void btnPagePrev_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            if (_CurrentPageIndex == 1) return;
            this.dgTaskList.CurrentPageIndex = _CurrentPageIndex - 2;
            this.BindData(_CurrentPageIndex - 1);
        }

        private void btnPageNext_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            if (_CurrentPageIndex == _PageCount) return;
            this.dgTaskList.CurrentPageIndex = _CurrentPageIndex;
            this.BindData(_CurrentPageIndex + 1);
        }

        private void btnPageLast_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = _PageCount - 1;
            this.BindData(_PageCount);
        }

        private void btnGotoPage_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            if (this.txtPage.Text == string.Empty)
            {
                this.txtPage.Text = "1";
            }
            int gotopage = 1;
            try
            {
                gotopage = Convert.ToInt32(this.txtPage.Text);
            }
            catch { }
            int currentpage = 0;

            if (gotopage >= _PageCount)
            {
                gotopage = _PageCount;
                currentpage = gotopage - 1;
                if (currentpage < 0) currentpage = 0;
            }
            else if (gotopage <= 0)
            {
                gotopage = 1;
            }
            else
            {
                currentpage = gotopage - 1;
            }

            this.dgTaskList.CurrentPageIndex = currentpage;

            this.BindData(gotopage);

            this.txtPage.Text = string.Empty;
        }

        #endregion

        #region page navigation

        private int _PageCount
        {
            get
            {
                if (ViewState["PageCount"] != null) return (int)ViewState["PageCount"];
                else
                    return 0;
            }
            set
            {
                ViewState["PageCount"] = value;
            }
        }

        private int _CurrentPageIndex
        {
            get
            {
                if (ViewState["CurrentPageIndex"] != null) return (int)ViewState["CurrentPageIndex"];
                else
                    return 0;
            }
            set
            {
                ViewState["CurrentPageIndex"] = value;
            }
        }

        private int _RowCount
        {
            get
            {
                if (ViewState["RowCount"] != null) return (int)ViewState["RowCount"];
                else
                    return 0;
            }
            set
            {
                ViewState["RowCount"] = value;
            }
        }

        private void SetPageNavi(int newPage)
        {
            if (newPage <= 1)
            {
                this.btnPageFirst.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_first_inact.gif";
                this.btnPagePrev.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_pre_inact.gif";
                this.btnPageFirst.Attributes["disabled"] = "true";
                this.btnPagePrev.Attributes["disabled"] = "true";
            }
            else
            {
                this.btnPageFirst.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_first.gif";
                this.btnPagePrev.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_pre.gif";
                this.btnPageFirst.Attributes.Remove("disabled");
                this.btnPagePrev.Attributes.Remove("disabled");
            }

            if (newPage >= _PageCount)
            {
                this.btnPageNext.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_next_inact.gif";
                this.btnPageLast.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_last_inact.gif";
                this.btnPageNext.Attributes["disabled"] = "true";
                this.btnPageLast.Attributes["disabled"] = "true";
            }
            else
            {
                this.btnPageNext.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_next.gif";
                this.btnPageLast.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_last.gif";
                this.btnPageNext.Attributes.Remove("disabled");
                this.btnPageLast.Attributes.Remove("disabled");
            }

            this.lblCurrentPageIndex.Text = newPage.ToString();
            this.lblPageCount.Text = _PageCount.ToString();
            this.lblRecordCount.Text = _RowCount.ToString();
        }

        private void SetPageCount(int count, int pageIndex)
        {
            if (count > 0)
            {
                _RowCount = count;
                _PageCount = count / this.dgTaskList.PageSize;
                if (count % this.dgTaskList.PageSize > 0) _PageCount++;

                _CurrentPageIndex = pageIndex;
                SetPageNavi(pageIndex);
            }
            else
            {
                _RowCount = count;
                _PageCount = count;
                _CurrentPageIndex = 0;
                SetPageNavi(0);
            }
        }

        #endregion

        private void ddlFlowType_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = 0;

            this.BindData(1);
        }

        //======>end=====
        void btnSearch_Click(object sender, EventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = 0;
            this.BindData(1);
        }

        void btnExport_Click(object sender, EventArgs e)
        {
            this.dgTaskList.AllowPaging = false;
            this.BindData(1);
            BEGDC.CC.Web.Control.ExportDataGridToExcel.Export(Page, dgTaskList, "MyTask.xls");
        }

        public void dgTaskList_SortCommand(object source, DataGridSortCommandEventArgs e)
        {
            if (this._Sorting.IndexOf(e.SortExpression) > -1 && this._Sorting == e.SortExpression)
                this._Sorting = e.SortExpression + " desc";
            else
                this._Sorting = e.SortExpression;
            this.BindData(this._CurrentPageIndex);
        }
    }
}
